home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
mail
/
mh
/
contrib
/
jpeek
/
mhlinks.build
< prev
next >
Wrap
Text File
|
1992-08-08
|
2KB
|
70 lines
#! /bin/sh
# ^^ THIS SHELL NEEDS BUILT-IN echo TO DO LOOP BELOW EFFICIENTLY.
# $Header: /home/jerry/.lib/at_cron/RCS/mhlinks.build,v 1.4 92/08/09 23:32:44 jerry mh_contrib $
### mhlinks.build - build database for 'mhlinks' program
### Usage: mhlinks.build [output file]
##
## mhlinks.build BUILDS A DATABASE FOR THE mhlinks COMMAND.
## THE DATABASE LISTS EACH MESSAGE FILE, SORTED BY I-NUMBER.
## THE DEFAULT FILENAME IS <MH-dir>/mhlinks.list; YOU CAN CHANGE
## THAT BY GIVING A PATHNAME ON THE COMMAND LINE.
##
## THE FILE IS ACTUALLY COMPRESSED AND HAS A '.Z' AT THE END...
## BUT YOU SHOULD *NOT* ADD A .Z TO YOUR NAME.
##
## mhlinks.build ONLY LOOKS INTO THE FOLDERS IN YOUR MH MAIL DIRECTORY.
## IT WON'T LOOK INTO ANYTHING BESIDES DIRECTORIES. THAT'S BECAUSE
## THE READ-ONLY FOLDERS OR SYMLINKS MIGHT POINT TO ANOTHER FILESYSTEM,
## WHERE THE I-NUMBERS DON'T MAKE SENSE.
#
# NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE
#
# USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
# PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
colrm=/usr/ucb/colrm # DELETES COLUMNS (YOU CAN ADAPT TO USE cut -c)
compress=/usr/ucb/compress # COMPRESSES FROM stdin TO stdout
find=/bin/find # MUST HAVE A -ls OPERATOR
lastinum= # INITIALIZE I-NUMBER OF PREVIOUS FILE
mh=/usr/local/mh # WHERE MH COMMANDS LIVE
mhdir="`$mh/mhpath +`" # MH MAIL DIRECTORY
sort=/bin/sort
outfile=${1-$mhdir/mhlinks.list}.Z
> "$outfile"
if [ ! -w "$outfile" ]
then
echo "`basename $0`: can't write to output file '$outfile'." 1>&2
exit 1
fi
# GO TO MH DIRECTORY SO FOLDER NAMES WILL BE SAME AS DIRECTORY NAMES.
cd $mhdir || exit 1
# GET LIST OF TOP-LEVEL DIRECTORIES WITH INNER find AND GIVE TO
# OUTER find LIKE afolder bfolder inbox ETC. DO THIS TO MAKE
# FILE PATHNAMES NEAT FOR INNER find. (IS THERE A BETTER WAY?)
$find `$find * -prune -type d -print` -name '[1-9]*' -type f -ls |
# STRIP OUT MIDDLE OF EACH LINE, LEAVE I-NUMBER AND PATHNAME:
$colrm 7 65 |
# SORT ASCII, NOT NUMERIC (DOES IT MATTER?):
$sort |
# BUILD A LINE THAT HAS ONE I-NUMBER AND ALL ITS PATHNAMES:
while read inum path
do
case "$inum" in
"$lastinum")
paths="$paths $path"
;;
*) # MAKE SURE THAT THERE'S A SPACE AFTER LAST PATHNAME
# SO THAT ALL PATHS WILL HAVE SPACE AROUND THEM (FOR MATCHING):
echo "$lastinum $paths "
lastinum="$inum"
paths="$path"
;;
esac
done |
# COMPRESS AS THE DATA FLIES BY... TO SAVE SPACE:
$compress > $outfile
# NEED TO CHECK FOR ERRORS